package completablefuture;

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.function.BiFunction;
import java.util.function.Supplier;

/**
 * @description: thenCombine
 * @author: WangPengPeng
 * @create: 2021-11-22 22:25
 **/
public class Demo7ThenCombine {

    //
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        CompletableFuture<Integer> future = CompletableFuture.supplyAsync(new Supplier<String>() {
            @Override
            public String get() {
                return "hello";
            }
            /**
             * 第1个参数是一个CompletableFuture类型，第2个参数是一个方法，并且是一个BiFunction，也就
             * 是该方法有2个输入参数，1个返回值。
             * 从该接口的定义可以大致推测，它是要在2个 CompletableFuture 完成之后，把2个
             * CompletableFuture的返回值传进去，再额外做一些事情。
             */
        }).thenCombine(CompletableFuture.supplyAsync(new Supplier<String>() {
            @Override
            public String get() {
                return "lagou";
            }
        }), new BiFunction<String, String, Integer>() {
            @Override
            public Integer apply(String s, String s2) {
                return s.length() + s2.length();
            }
        });
        Integer integer = future.get();

        System.out.println(integer);
    }
}
